const express = require('express');
const app = express();
const swaggerJsdoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');

// Swagger配置选项
const options = {
    definition: {
        // 指定所使用的OpenAPI规范的版本。在这个例子中，使用的是OpenAPI 3.0版本。
        openapi: '3.0.0',
        info: {
            // API的标题或名称。
            title: 'API文档',
            // API的版本号。
            version: '1.0.0',
            // API的描述。
            description: '这是一个使用Swagger和Express生成的API文档。',
        },
    },
    // 生成API文档所依据的包含Swagger注释的文件路径。
    apis: ['./day002.js'],
};

// 根据配置选项生成Swagger规范
const specs = swaggerJsdoc(options);

// 使用Swagger UI中间件
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs));

/**
 * @swagger
 * /api/data:
 *   get:
 *     summary: 获取数据
 *     description: 获取所有数据
 *     responses:
 *       200:
 *         description: 成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   description: 成功消息
 *                 data:
 *                   type: array
 *                   items:
 *                     type: object
 *                     properties:
 *                       id:
 *                         type: integer
 *                         description: 数据ID
 *                       name:
 *                         type: string
 *                         description: 名称
 *                       age:
 *                         type: integer
 *                         description: 年龄
 */
app.get('/api/data', (req, res) => {
    const data = [
        { id: 1, name: 'John', age: 25 },
        { id: 2, name: 'Sarah', age: 32 }
    ];
    res.json({ message: 'GET请求成功！', data });
});

/**
 * @swagger
 * /api/data:
 *   post:
 *     summary: 创建数据
 *     description: 创建新的数据
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               name:
 *                 type: string
 *                 description: 名称
 *               age:
 *                 type: integer
 *                 description: 年龄
 *     responses:
 *       200:
 *         description: 成功
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   description: 成功消息
 *                 data:
 *                   type: object
 *                   properties:
 *                     id:
 *                       type: integer
 *                       description: 数据ID
 *                     name:
 *                       type: string
 *                       description: 名称
 *                     age:
 *                       type: integer
 *                       description: 年龄
 */
app.post('/api/data', (req, res) => {
    const data = req.body;
    data.id = 3; // 模拟生成唯一ID
    res.json({ message: 'POST请求成功！', data });
});

// 启动服务器
app.listen(3000, () => {
    console.log('服务器已启动，监听端口3000...');
});